package com.itany.corejava.code07_面向对象.bms;

/**
 * @author 石小俊
 * @date 2023年04月21日 15:53
 * 银行类
 */
public class Bank {
    // 存储所有的账户信息
    static Account[] accounts = new Account[100];
    // 用于表示当前已开户账户总数
    // 即:当前账户数组中已存放数据的最大下标+1
    static int count = 0;


    /**
     * 开户
     * @param account 需要开户的账户信息
     * @return 开户是否成功
     */
    public static boolean register(Account account) {
        // 只要当前开户的账户总数没有达到最大值,则可以开户
        if (count < accounts.length) {
            accounts[count++] = account;
            return true;
        }
        return false;
    }

    /**
     * 账户登录
     * @param id       账户编号
     * @param password 账户密码
     * @return
     */
    public static Account login(int id, String password) {
        // 查询数组中是否有一个Account对象的账户编号与密码与传递的参数一致
        // 遍历数组中所有已开户的信息
        for (int i = 0; i < count; i++) {
            Account account = accounts[i];
            // 如果有一致的,则表示登录成功,返回对应的Account
            if (account.getId() == id && password.equals(account.getPassword())) {
                // 如何遍历的元素中存在id与password都相等的账户,则表示登录成功
                // 返回对应的账户信息
                return account;
            }
        }
        // 如果没有找到相同的,则登录失败,提示账号或密码错误
        return null;
    }

    /**
     * 根据账户编号查询对应账户信息
     * @param id
     * @return
     */
    public static Account findById(int id) {
        // 遍历所有已开户的账户信息,根据id找到对应账户
        for (int i = 0; i < count; i++) {
            if (accounts[i].getId() == id) {
                return accounts[i];
            }
        }
        return null;
    }
}
